今天一樣從Codewars的8kyu開始唄。
這一次的題目一樣是隨機出來的,反正就隨便挑了一題啦XDDD
廢話不多說就來看看題目吧,今天的題目非常簡單(廢話 因為是8kyu啊XD
今天的題目需求很簡單,只要把大於5的數字改成1,小於5的數字改成0,形成一個「假二元」的概念XDDD
接下來要拆解需求啦
接下來開始實作吧! 把專案創建好之後,就把第一個測試案例名稱寫出來吧!
我們要從最簡單的第一步開始,老樣子,如果覺得一開始有點卡卡的就可以加入3A原則的註解唷!
接下來就可以寫Code,一開始Test Case中的Code會長這樣
而Production Code 就長這樣
接下來就跑一下測試,理所當然的會Fail,如果過了就見鬼了,這裡就可以看見我們的第一個紅燈,這時候來Commit一下吧
接下來把Production Code改一下吧,用最小步伐讓Test Case Pass!
對,你沒看錯,就是這個樣子ˊ_>ˋ 反正我們已經可以讓第一個test case過惹
接下來跑個測試,這個沒過的話我會很驚訝XD
再開始寫第二個test case之前來Commit一下吧!
現在寫了第二個test case,這一支test case會讓我們需要印出0的概念!
接下來跑一下測試吧,一定是紅燈!
開始改之前可以先commit一下
接下來用最簡單的方式改Production Code吧!
對,你依然沒看錯XD 就是這樣,反正可以過test case啊!!!
沒錯,他綠燈了,這時候Commit一下唄
接下來審視一下test code吧!
因為test code 也是我們的code 之後也是需要維護的!
Tips: 如果你有Resharper 那就用Ctrl +R + I讓他inline解決吧XD
改完test code之後
跑一下測試,all pass之後就commit唄
接下來寫第三個test case吧!
第三個test case要思考一下,怎樣才能夠在「最小」的步伐內完成的測試案例,於是就產生了第三個測試案例了
第三個寫出來了,很明顯的,他一定會錯,如果他對了就見鬼了
接下來就來改Production Code吧!!!
改好之後來跑個測試吧! 他過了,雖然code有點醜,不過至少他過了!
接下來寫第4個test case吧!
這時候其實我發現,好像第三個測試案例輸入兩個小於5的字串會比較好,比如說00,或是14之類的數字。
不過沒關係,我們就先把第三個測試案例取消然後來寫第4個測試案例吧!
取消那個測試案例只要把那個測試案例上頭的Attribute拿掉就可以了
現在就fail了第四個測試案例,然後來commit 一下吧
接下來我們來改Production Code唄!
跑個測試! Pass!!
接下來Commit一下,再來回頭審視一下Production Code,摁…似乎可以用Linq的寫法不過需求還尚未完成就先不改了吧
再來就把第三個測試案例召喚回來吧!!
召喚回來之後就跑個測試,然後commit一下吧!
接下來就改一下Production Code唄!
跑個測試,Pass!
來commit一下,然後我聞到味道了!!
可以把if else這串抽出來!
就變成這個樣子,然後跑個測試,pass,commit!
這樣的話就很方便了,可以把foreach抽成linq語法
跑個測試,Pass,Commit!
基本上現在的測試已經可以涵蓋所有輸入了,不過我這個人是謹慎的人所以我們來多寫幾個測試案例吧!!!
跑過測試都All Pass 之後就再Commit一次吧!
然後再Codewars上提交! Pass!!
通過! 接下來我最喜歡的部分就是去看看別人寫這題寫得如何XD
看到這個人寫就發現我忽略了還有string.Concat這個方法啊…
而且比我的還要簡潔(跪地
我的linq又臭又長,為了改而改的感覺,感覺不改都比較好看呢O_O
看來下一次遇到要累加字串的部分可以試試Concat這個方法呢(我才不會說當初refactor才沒有依賴reSharper呢 亨~
下一題,明天見!
喜歡的可以到這個 github url 看看 commit 紀錄
https://github.com/SQZ777/Codewars_FakeBinary.git